/*
 * File      : isr_tab.s
 * This file is part of RT-Thread RTOS
 * COPYRIGHT (C) 2021, RT-Thread Development Team
 *
 * Change Logs:
 * Date           Author       Notes
 * 2021-01-02     iysheng      first implementation
 */

.syntax unified
.cpu cortex-m3
.fpu softvfp
.thumb

.global  g_isr_vectors
    .section  .isr_vector,"a",%progbits
    .type  g_isr_vectors, STT_OBJECT

.weak Reset_Handler
g_isr_vectors:
    .word     _estack                           /* Top of Stack */
    .word     Reset_Handler                     /* Reset Handler */
    .word     NMI_Handler                       /* NMI Handler */
    .word     HardFault_Handler                 /* Hard Fault Handler */
    .word     MemManage_Handler                 /* MPU Fault Handler */
    .word     BusFault_Handler                  /* Bus Fault Handler */
    .word     UsageFault_Handler                /* Usage Fault Handler */
    .word     0                                 /* Reserved */
    .word     0                                 /* Reserved */
    .word     0                                 /* Reserved */
    .word     0                                 /* Reserved */
    .word     SVC_Handler                       /* SVCall Handler */
    .word     DebugMon_Handler                  /* Debug Monitor Handler */
    .word     0                                 /* Reserved */
    .word     PendSV_Handler                    /* PendSV Handler */
    .word     SysTick_Handler                   /* SysTick Handler */

    /* external interrupts handler */
    .word     WWDGT_IRQHandler                  /* 16:Window Watchdog Timer */
    .word     LVD_IRQHandler                    /* 17:LVD through EXTI Line detect */
    .word     TAMPER_IRQHandler                 /* 18:Tamper through EXTI Line detect */
    .word     RTC_IRQHandler                    /* 19:RTC through EXTI Line */
    .word     FMC_IRQHandler                    /* 20:FMC */
    .word     RCU_CTC_IRQHandler                /* 21:RCU and CTC */
    .word     EXTI0_IRQHandler                  /* 22:EXTI Line 0 */
    .word     EXTI1_IRQHandler                  /* 23:EXTI Line 1 */
    .word     EXTI2_IRQHandler                  /* 24:EXTI Line 2 */
    .word     EXTI3_IRQHandler                  /* 25:EXTI Line 3 */
    .word     EXTI4_IRQHandler                  /* 26:EXTI Line 4 */
    .word     DMA0_Channel0_IRQHandler          /* 27:DMA0 Channel0 */
    .word     DMA0_Channel1_IRQHandler          /* 28:DMA0 Channel1 */
    .word     DMA0_Channel2_IRQHandler          /* 29:DMA0 Channel2 */
    .word     DMA0_Channel3_IRQHandler          /* 30:DMA0 Channel3 */
    .word     DMA0_Channel4_IRQHandler          /* 31:DMA0 Channel4 */
    .word     DMA0_Channel5_IRQHandler          /* 32:DMA0 Channel5 */
    .word     DMA0_Channel6_IRQHandler          /* 33:DMA0 Channel6 */
    .word     ADC0_1_IRQHandler                 /* 34:ADC0 and ADC1 */
    .word     USBD_HP_CAN0_TX_IRQHandler        /* 35:USBD HP and CAN0 TX */
    .word     USBD_LP_CAN0_RX0_IRQHandler       /* 36:USBD LP and CAN0 RX0 */
    .word     CAN0_RX1_IRQHandler               /* 37:CAN0 RX1 */
    .word     CAN0_EWMC_IRQHandler              /* 38:CAN0 EWMC */
    .word     EXTI5_9_IRQHandler                /* 39:EXTI5 to EXTI9 */
    .word     TIMER0_BRK_IRQHandler             /* 40:TIMER0 Break */
    .word     TIMER0_UP_IRQHandler              /* 41:TIMER0 Update */
    .word     TIMER0_TRG_CMT_IRQHandler         /* 42:TIMER0 Trigger and Commutation  */
    .word     TIMER0_Channel_IRQHandler         /* 43:TIMER0 Channel Capture Compare */
    .word     TIMER1_IRQHandler                 /* 44:TIMER1 */
    .word     TIMER2_IRQHandler                 /* 45:TIMER2 */
    .word     TIMER3_IRQHandler                 /* 46:TIMER3 */
    .word     I2C0_EV_IRQHandler                /* 47:I2C0 Event */
    .word     I2C0_ER_IRQHandler                /* 48:I2C0 Error */
    .word     I2C1_EV_IRQHandler                /* 49:I2C1 Event */
    .word     I2C1_ER_IRQHandler                /* 50:I2C1 Error */
    .word     SPI0_IRQHandler                   /* 51:SPI0 */
    .word     SPI1_IRQHandler                   /* 52:SPI1 */
    .word     USART0_IRQHandler                 /* 53:USART0 */
    .word     USART1_IRQHandler                 /* 54:USART1 */
    .word     USART2_IRQHandler                 /* 55:USART2 */
    .word     EXTI10_15_IRQHandler              /* 56:EXTI10 to EXTI15 */
    .word     RTC_Alarm_IRQHandler              /* 57:RTC Alarm */
    .word     USBD_WKUP_IRQHandler              /* 58:USBD Wakeup */
    .word     TIMER7_BRK_IRQHandler             /* 59:TIMER7 Break  */
    .word     TIMER7_UP_IRQHandler              /* 60:TIMER7 Update  */
    .word     TIMER7_TRG_CMT_IRQHandler         /* 61:TIMER7 Trigger and Commutation */
    .word     TIMER7_Channel_IRQHandler         /* 62:TIMER7 Channel Capture Compare */
    .word     ADC2_IRQHandler                   /* 63:ADC2 */
    .word     EXMC_IRQHandler                   /* 64:EXMC */
    .word     SDIO_IRQHandler                   /* 65:SDIO */
    .word     TIMER4_IRQHandler                 /* 66:TIMER4 */
    .word     SPI2_IRQHandler                   /* 67:SPI2 */
    .word     UART3_IRQHandler                  /* 68:UART3 */
    .word     UART4_IRQHandler                  /* 69:UART4 */
    .word     TIMER5_IRQHandler                 /* 70:TIMER5  */
    .word     TIMER6_IRQHandler                 /* 71:TIMER6 */
    .word     DMA1_Channel0_IRQHandler          /* 72:DMA1 Channel0 */
    .word     DMA1_Channel1_IRQHandler          /* 73:DMA1 Channel1 */
    .word     DMA1_Channel2_IRQHandler          /* 74:DMA1 Channel2 */
    .word     DMA1_Channel3_4_IRQHandler        /* 75:DMA1 Channel3 and Channel4 */

    /* Exception Handlers */
    .weak   NMI_Handler
    .type   NMI_Handler, STT_FUNC
NMI_Handler:
    b       .

    .weak   MemManage_Handler
    .type   MemManage_Handler, STT_FUNC
MemManage_Handler:
    b       .

    .weak   BusFault_Handler
    .type   BusFault_Handler, STT_FUNC
BusFault_Handler:
    b       .

    .weak   UsageFault_Handler
    .type   UsageFault_Handler, STT_FUNC
UsageFault_Handler:
    b       .

    .weak   SVC_Handler
    .type   SVC_Handler, STT_FUNC
SVC_Handler:
    b       .

    .weak   DebugMon_Handler
    .type   DebugMon_Handler, STT_FUNC
DebugMon_Handler:
    b       .

    .weak   PendSV_Handler
    .type   PendSV_Handler, STT_FUNC
PendSV_Handler:
    b       .

    .weak   SysTick_Handler
    .type   SysTick_Handler, STT_FUNC
SysTick_Handler:
    b       .

.global  default_irq_handler
    .section  .text.default_irq_handler,"ax",%progbits
    .type  default_irq_handler, STT_FUNC
default_irq_handler:
    b  .

    .macro  IRQ handler
    .weak   \handler
    .set    \handler, default_irq_handler
    .endm

    /* IQR Handler */
    IRQ WWDGT_IRQHandler
    IRQ LVD_IRQHandler
    IRQ TAMPER_IRQHandler
    IRQ RTC_IRQHandler
    IRQ FMC_IRQHandler
    IRQ RCU_CTC_IRQHandler
    IRQ EXTI0_IRQHandler
    IRQ EXTI1_IRQHandler
    IRQ EXTI2_IRQHandler
    IRQ EXTI3_IRQHandler
    IRQ EXTI4_IRQHandler
    IRQ DMA0_Channel0_IRQHandler
    IRQ DMA0_Channel1_IRQHandler
    IRQ DMA0_Channel2_IRQHandler
    IRQ DMA0_Channel3_IRQHandler
    IRQ DMA0_Channel4_IRQHandler
    IRQ DMA0_Channel5_IRQHandler
    IRQ DMA0_Channel6_IRQHandler
    IRQ ADC0_1_IRQHandler
    IRQ USBD_HP_CAN0_TX_IRQHandler
    IRQ USBD_LP_CAN0_RX0_IRQHandler
    IRQ CAN0_RX1_IRQHandler
    IRQ CAN0_EWMC_IRQHandler
    IRQ EXTI5_9_IRQHandler
    IRQ TIMER0_BRK_IRQHandler
    IRQ TIMER0_UP_IRQHandler
    IRQ TIMER0_TRG_CMT_IRQHandler
    IRQ TIMER0_Channel_IRQHandler
    IRQ TIMER1_IRQHandler
    IRQ TIMER2_IRQHandler
    IRQ TIMER3_IRQHandler
    IRQ I2C0_EV_IRQHandler
    IRQ I2C0_ER_IRQHandler
    IRQ I2C1_EV_IRQHandler
    IRQ I2C1_ER_IRQHandler
    IRQ SPI0_IRQHandler
    IRQ SPI1_IRQHandler
    IRQ USART0_IRQHandler
    IRQ USART1_IRQHandler
    IRQ USART2_IRQHandler
    IRQ EXTI10_15_IRQHandler
    IRQ RTC_Alarm_IRQHandler
    IRQ USBD_WKUP_IRQHandler
    IRQ TIMER7_BRK_IRQHandler
    IRQ TIMER7_UP_IRQHandler
    IRQ TIMER7_TRG_CMT_IRQHandler
    IRQ TIMER7_Channel_IRQHandler
    IRQ ADC2_IRQHandler
    IRQ EXMC_IRQHandler
    IRQ SDIO_IRQHandler
    IRQ TIMER4_IRQHandler
    IRQ SPI2_IRQHandler
    IRQ UART3_IRQHandler
    IRQ UART4_IRQHandler
    IRQ TIMER5_IRQHandler
    IRQ TIMER6_IRQHandler
    IRQ DMA1_Channel0_IRQHandler
    IRQ DMA1_Channel1_IRQHandler
    IRQ DMA1_Channel2_IRQHandler
    IRQ DMA1_Channel3_4_IRQHandler
